/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mireille.learning.lesson2.exceptions.esercizio3;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author Luca
 */
public class Terminale2 {
    
    /*niveau supérieur= méthode appelante : nous définirons ici le code pour 
     * gérer l'exception pouvant se produire au niveau de la méthode insertAge. 
     * Ici nous traitons l'exception
     * 
     */
    
    public static void main(String [] args){
        //code susceptible de lever une exception
        try {Terminale2 t = new Terminale2();
            String numero = JOptionPane.showInputDialog("Inserisci un numero");
            System.out.println("numero = " + numero);
            t.insertAge(numero);
            //on doit avoir autant de catch que de type d'exception levable
        }catch (ErroreEtaException ex){
            //code de traitement de l'exception de type ErroreEtaException
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
        catch (ErroreEtaToBigException eu){
            JOptionPane.showMessageDialog(null, eu.getMessage());
        }
        catch (NumberFormatException er){
            JOptionPane.showMessageDialog(null, "Inserire solo il numero");
        }
        catch (DBCannotWriteException eu){
            JOptionPane.showMessageDialog(null, eu.getMessage());
        }
        //on peut avoir après le ou les catch une instruction finally pour nettoyer le contexte
        
    }
    //****************************************************************************
    /*
     * 
     */
    //****************************************************************************
    
    public void insertAge(String s) throws ErroreEtaException, ErroreEtaToBigException, DBCannotWriteException {
        int i = Integer.parseInt(s);
        if (i < 0) {
            throw new ErroreEtaException();
        }
        if (i > 150) {
            throw new ErroreEtaToBigException();
        }
        writeOnDB(i);
        System.out.println("età correttamente inserita ");
    }
   //*****************************************************************************
   /*nous ajoutons throws dans la signature de toutes les méthodes dont le code 
    * est susceptible de lever une exception. cette clause provoque l'éjection (throws)
    * de l'exception qd elle survient au niveau supérieur 
    * 
   */
    //*****************************************************************************
    
    public void writeOnDB(int age) throws DBCannotWriteException{
        if(age == 10){
            throw new DBCannotWriteException();
        }
        System.out.println("SCRITTURA OK !");
    }
    
    class DBCannotWriteException extends Exception {

        public DBCannotWriteException() {
            super("Error in Database");
        }

    }

    class ErroreEtaException extends Exception {

        public ErroreEtaException() {
            super("Inserire un numero positivo!");
        }
    }

    class ErroreEtaToBigException extends Exception {

        public ErroreEtaToBigException() {
            super("Età troppo grande!");
        }
    }
    
    
    
}

